分类
联系方式
  1. 新浪微博
  2. E-mail

NDK ANativeWindow

介绍

ANativeWindow 是 Java 的 Surface 在 NDK C/C++ 层的等价物。

API

surface 转 ANativeWindow

接收 Java 侧 surface 对象,转为 ANativeWindow:

ANativeWindow* ANativeWindow_fromSurface(JNIEnv* env, jobject surface);

保存释放引用

保存释放 ANativeWindow 对象引用:

void ANativeWindow_acquire(ANativeWindow* window);
void ANativeWindow_release(ANativeWindow* window);

向 buffer 写入数据并提交

int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds); 
// 绘制代码
int32_t ANativeWindow_unlockAndPost(ANativeWindow* window);

其中:ANativeWindow_Buffer 是一个结构体。

在这个方法中,进行对 Surface 的绘图操作。所谓绘图,就是向结构体 buffer 中写入数据。写完了 unlickAndPost,进行上屏。

获取 Surface 尺寸和格式

int32_t ANativeWindow_getWidth(ANativeWindow* window); 
int32_t ANativeWindow_getHeight(ANativeWindow* window);
int32_t ANativeWindow_getFormat(ANativeWindow* window);

Flutter 中的 ANativeWindow 操作

如果说 ANativeWindow_lock 和 ANativeWindow_unlockAndPost 用于绘制上屏,那么 Flutter Engine 也应该有这个调用才对,但是我再代码里为什么没找到呢?

网络资源

Android中的ANativeWindow